package wonder;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * ISWService interface.
 * </p>
 * 
 * @author u211354
 * @version $Id: $
 */
public interface ISWService {
	public enum BoardSet {
		BASE, LEADERS, CITIES, WONDER_PACK, ESSEN, FANS;
	}

	public enum BoardSide {
		A, B;
	}

	/**
	 * <p>
	 * configure.
	 * </p>
	 * 
	 * @param map
	 *            a {@link java.util.Map} object.
	 * @throws java.lang.Exception
	 *             if any.
	 */
	public abstract void configure(Map<Object, Object> map) throws Exception;

	/**
	 * <p>
	 * release.
	 * </p>
	 * 
	 * @throws java.lang.Exception
	 *             if any.
	 */
	public abstract void release() throws Exception;

	/**
	 * <p>
	 * randomSetup
	 * </p>
	 * 
	 * @param players
	 *            a int.
	 * @return a {@link java.util.List} object.
	 * @throws java.lang.Exception
	 *             if any.
	 */
	public abstract List<Board> randomSetup(int players) throws Exception;

	/**
	 * <p>
	 * randomSetup
	 * </p>
	 * 
	 * @param players
	 *            a int.
	 * @param sets
	 *            a {@link java.util.List} object.
	 * @return a {@link java.util.List} object.
	 * @throws java.lang.Exception
	 *             if any.
	 */
	public abstract List<Board> randomSetup(int players, List<BoardSet> sets)
			throws Exception;

	/**
	 * <p>
	 * getSetList
	 * </p>
	 * 
	 * @return a {@link java.util.List} object.
	 */
	public abstract List<BoardSet> getSetList();

	public abstract List<Board> getBoards();

	public abstract Board getBoard(String map, BoardSide side);

	public abstract int countAvailable();

	public abstract void setAvailability(BoardSet set, boolean available);

	public abstract void setAvailability(String map, boolean available);

	public abstract void setAvailability(Board map, boolean available);
}
